跳到主要内容

使用可视化着色器

IVRVisualScript是喜欢用图形化方法进行编码的用户的选择,而VisualShader则是创建着色器的可视化选择。

由于着色器本质上与视觉效果有联系,与纯粹基于脚本的着色器相比,基于图的方式,可以看到纹理,材质的预览,这提供了很多额外的便利。而另一方面,VisualShaders并没有暴露出着色器脚本的所有功能,所以对于一些特定的效果,有必要同时使用这两者。

创建VisualShader

关于可视化着色器的创建可参考IdeaXR中着色器的使用

创建成功后会弹出一个可视化着色器的编辑界面: VisualShader_editor

Visual Shader 编辑器的布局包括两部分:上层工具栏和图表本身。

在上方工具栏中从左到右:

  • 添加节点 按钮会显示一个弹出式菜单,让你为着色器图添加节点。

  • 下拉菜单是着色器类型。顶点,片段和光线,和脚本着色器一样,它定义了哪些内置节点将是可用的。

  • 下面的按钮和数字输入控制缩放级别, 网格捕捉和网格线之间的距离(单位为像素)。

  • 最后一个图标显示了与你的图表对应生成的着色器代码。

使用VisualShader编辑器

创建可视化着色器后,你可以在着色器的属性界面设置shader_type和rander_mode。

visualshader_type_rander

默认情况下,每个新的 VisualShader 都会有一个输出(output)节点。你所做的就是设计计算需要输出的属性的值,然后连接到对应属性的引脚上,以达到你想要的效果。在可视化着色器中,节点是基本单元。要添加一个新的节点,点击左上角的添加节点按钮,或者在图形中的任何一个空的位置上右击,就会弹出一个菜单。

create_visualshader_node

如果你是点击鼠标右键调出的节点菜单界面,那么这个菜单会出现在你鼠标光标的位置,双击创建的节点也是在光标位置,你也可以长按鼠标左键将节点拖到指定位置创建。

虽然弹出的节点是按类别分类的,但一开始会不知所以。试着添加一些节点,将它们连接到输出,观察会发生什么。

当把任何scalar输出连接到vector输入时,向量的所有分量将取标量的值。

当把任何vector输出连接到scalar输入时,标量的值将是向量分量的平均值。

可视化着色器节点介绍

接下来将介绍一些常用的,值得了解的可视化着色器节点。

Input节点

Input节点包含了当前着色器类型下的内置属性

VSshader_input_node

Operator类型节点

可根据输入的类型指定相关的操作符节点:

create_Op_node

以标量节点为例,创建节点后可以选择相关操作符:

ScalarOp

Function类型节点

与Operator类型节点类似,可根据输入的类型指定相关的函数节点:

create_func_node

以标量节点为例,创建节点后可以选择相关操作符:

ScalarFunc

Expression节点

Expression节点允许你在可视化着色器中使用IdeaXR着色语言。该节点具有添加任意数量的所需输入和输出端口的按钮。你还可以设置每个端口的名称和类型。你可以编写复杂的过程,并使用基于文本的着色器的全部功能,例如循环,关键字discard,扩展类型,等等。

expresson_node

Boolean节点

Boolean 节点可以转换为或 ScalarVector , 分别表示 01 和 (0, 0, 0) 或 (1, 1, 1) . 该属性可用于一键启用或禁用某些效果部件.

boolean

If 节点

If 节点允许你设置一个向量,它将返回 ab 之间的比较结果。有三个向量可以返回: a == b (在这种情况下,容差参数(tolerance)是作为比较阈值提供的--默认情况下它等于最小值。即 0.00001 ),a > ba < b

if_node

Switch节点

如果布尔条件是truefalseSwitch节点返回一个向量。Boolean在上面介绍过。如果你把一个向量转换为真布尔值,那么向量的所有分量都应该高于零。

switch_node